{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Forecasting Models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "NeuralForecast currently offers the following models.\n",
    "\n",
    "| Model<sup>1</sup> | AutoModel<sup>2</sup> | Family<sup>3</sup> | Univariate / Multivariate<sup>4</sup> | Forecast Type<sup>5</sup>           | Exogenous<sup>6</sup> |\n",
    "|:------|:----------|:-------------|:--------------------------|:--------------|:----------------|\n",
    "|`Autoformer` | `AutoAutoformer` | Transformer | Univariate | Direct | F |\n",
    "|`BiTCN` | `AutoBiTCN` | CNN | Univariate | Direct | F/H/S | \n",
    "|`DeepAR` | `AutoDeepAR` | RNN | Univariate | Direct | F/S | \n",
    "|`DeepNPTS` | `AutoDeepNPTS` | MLP | Univariate | Direct  | F/H/S | \n",
    "|`DilatedRNN` | `AutoDilatedRNN` | RNN | Univariate | Direct  | F/H/S | \n",
    "|`FEDformer` | `AutoFEDformer` | Transformer | Univariate | Direct  | F | \n",
    "|`GRU` | `AutoGRU` | RNN | Univariate | Both<sup>8</sup>  | F/H/S | \n",
    "|`HINT` | `AutoHINT` | Any<sup>7</sup> | Both<sup>7</sup> | Both<sup>7</sup>  | F/H/S | \n",
    "|`Informer` | `AutoInformer` | Transformer | Univariate | Direct  | F | \n",
    "|`iTransformer` | `AutoiTransformer` | Transformer | Multivariate | Direct  | - | \n",
    "|`KAN` | `AutoKAN` | KAN | Univariate | Direct  | F/H/S | \n",
    "|`LSTM` | `AutoLSTM` | RNN | Univariate | Both<sup>8</sup> | F/H/S | \n",
    "|`MLP` | `AutoMLP` | MLP | Univariate | Direct | F/H/S | \n",
    "|`MLPMultivariate` | `AutoMLPMultivariate` | MLP | Multivariate | Direct  | F/H/S | \n",
    "|`NBEATS` | `AutoNBEATS` | MLP | Univariate | Direct  | - | \n",
    "|`NBEATSx` | `AutoNBEATSx` | MLP | Univariate | Direct  | F/H/S | \n",
    "|`NHITS` | `AutoNHITS` | MLP | Univariate | Direct | F/H/S | \n",
    "|`NLinear` | `AutoNLinear` | MLP | Univariate | Direct  | - | \n",
    "|`PatchTST` | `AutoPatchTST` | Transformer | Univariate | Direct  | - | \n",
    "|`RMoK` | `AutoRMoK` | KAN | Multivariate | Direct | - |\n",
    "|`RNN` | `AutoRNN` | RNN | Univariate | Both<sup>8</sup>  | F/H/S | \n",
    "|`SOFTS` | `AutoSOFTS` | MLP | Multivariate | Direct  | - | \n",
    "|`StemGNN` | `AutoStemGNN` | GNN | Multivariate | Direct  | - | \n",
    "|`TCN` | `AutoTCN` | CNN | Univariate | Direct  | F/H/S | \n",
    "|`TFT` | `AutoTFT` | Transformer | Univariate | Direct  | F/H/S | \n",
    "|`TiDE` | `AutoTiDE` | MLP | Univariate | Direct  | F/H/S | \n",
    "|`TimeMixer` | `AutoTimeMixer` | MLP | Multivariate | Direct  | - | \n",
    "|`TimeLLM` | - | LLM | Univariate | Direct  | - | \n",
    "|`TimesNet` | `AutoTimesNet` | CNN | Univariate | Direct  | F |\n",
    "|`TimeXer` | `AutoTimeXer` | Transformer | Multivariate | Direct  | F | \n",
    "|`TSMixer` | `AutoTSMixer` | MLP | Multivariate | Direct  | - | \n",
    "|`TSMixerx` | `AutoTSMixerx` | MLP | Multivariate | Direct  | F/H/S | \n",
    "|`VanillaTransformer` | `AutoVanillaTransformer` | Transformer | Univariate | Direct  | F | \n",
    "|`xLSTM` | `AutoxLSTM` | mLSTM | Univariate | Direct  | F/H/S | \n",
    "\n",
    "\n",
    "1. **Model**: The model name.\n",
    "2. **AutoModel**: NeuralForecast offers most models also in an Auto* version, in which the hyperparameters of the underlying model are automatically optimized and the best-performing model for a validation set is selected. The optimization methods include grid search, random search, and Bayesian optimization.\n",
    "3. **Family**: The main neural network architecture underpinning the model. \n",
    "4. **Univariate / Multivariate**: A multivariate model explicitly models the interactions between multiple time series in a dataset and will provide predictions for multiple time series concurrently. In contrast, a univariate model trained on multiple time series implicitly models interactions between multiple time series and provides predictions for single time series concurrently. Multivariate models are typically computationally expensive and empirically do not necessarily offer better forecasting performance compared to using a univariate model.\n",
    "5. **Forecast Type**: Direct forecast models are models that produce all steps in the forecast horizon at once. In contrast, recursive forecast models predict one-step ahead, and subsequently use the prediction to compute the next step in the forecast horizon, and so forth. Direct forecast models typically suffer less from bias and variance propagation as compared to recursive forecast models, whereas recursive models can be computationally less expensive.\n",
    "6. **Exogenous**: Whether the model accepts exogenous variables. This can be exogenous variables that contain information about the past and future (F), about the past only (_historical_, H), or that contain static information (_static_, S).\n",
    "7. __HINT__ is a modular framework that can combine any type of neural architecture with task-specialized mixture probability and advanced hierarchical reconciliation strategies.\n",
    "8. Models that can produce forecasts recursively and direct. For example, the RNN model uses an RNN to encode the past sequence, and subsequently the user can choose between producing forecasts recursively using the RNN or direct using an MLP that uses the encoded sequence as input. The models feature an `recursive=False` feature that sets how they produce forecasts."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {},
 "nbformat": 4,
 "nbformat_minor": 2
}
